package com.jpcc.vw.onlineRadio.model;


import com.jpcc.vw.onlineRadio.model.bean.AlbumBrowseBean;
import com.jpcc.vw.onlineRadio.model.bean.AlbumCategoryBean;
import com.jpcc.vw.onlineRadio.model.bean.AlbumCategoryResultBean;
import com.jpcc.vw.onlineRadio.model.bean.AlbumFavouriteBean;
import com.jpcc.vw.onlineRadio.model.bean.AllSearchResult;
import com.jpcc.vw.onlineRadio.model.bean.BaseBean;
import com.jpcc.vw.onlineRadio.model.bean.BestCollectionBean;
import com.jpcc.vw.onlineRadio.model.bean.BoughtAlbumBean;
import com.jpcc.vw.onlineRadio.model.bean.CPInfoBean;
import com.jpcc.vw.onlineRadio.model.bean.CategoryTagBean;
import com.jpcc.vw.onlineRadio.model.bean.CommonAlbumRadioSearchResultBean;
import com.jpcc.vw.onlineRadio.model.bean.DailyRecommendationBean;
import com.jpcc.vw.onlineRadio.model.bean.ExclusiveRecommendationBean;
import com.jpcc.vw.onlineRadio.model.bean.HotwordsBean;
import com.jpcc.vw.onlineRadio.model.bean.LiveRadioDetailBean;
import com.jpcc.vw.onlineRadio.model.bean.LocalOnlineRadioBean;
import com.jpcc.vw.onlineRadio.model.bean.NewSearchAlbumResultBean;
import com.jpcc.vw.onlineRadio.model.bean.OnlineRadioCityBean;
import com.jpcc.vw.onlineRadio.model.bean.OnlineRadioSimpleInfoBean;
import com.jpcc.vw.onlineRadio.model.bean.PaiedAlbumBean;
import com.jpcc.vw.onlineRadio.model.bean.PlayHistoryOnlineBean;
import com.jpcc.vw.onlineRadio.model.bean.PlayInfoBean;
import com.jpcc.vw.onlineRadio.model.bean.PriceTypeInfoBean;
import com.jpcc.vw.onlineRadio.model.bean.RadioDeailBean;
import com.jpcc.vw.onlineRadio.model.bean.SearchHistoryResponseBean;
import com.jpcc.vw.onlineRadio.model.bean.SuggestWordsBean;
import com.jpcc.vw.onlineRadio.model.bean.TopListAlbumBean;
import com.jpcc.vw.onlineRadio.model.bean.TopListBean;
import com.jpcc.vw.onlineRadio.model.bean.VIPInfoBean;
import com.jpcc.vw.onlineRadio.model.bean.VIPRecommendationBean;
import com.jpcc.vw.onlineRadio.model.bean.XiMaLaYaOrderBean;

import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Query;
import rx.Observable;

public interface IRadio {
    /**
     * 根据经纬度获取城市code
     * @param latitude
     * @param longitude
     * @return
     */
    Observable<OnlineRadioCityBean> GetRadioCode(String latitude, String longitude);

    /**
     * •获取城市下的电台列表
     * @param cityCode
     * @param pageIndex
     * @return
     */
    Observable<OnlineRadioSimpleInfoBean> GetRadiosByCity(int cityCode, int pageIndex);

    /**
     * •获取独家推荐专辑
     * @return
     */

    Observable<ExclusiveRecommendationBean> GetExclusiveRecommendations();


    /**
     * 获取每日推荐
     * @return
     */
    Observable<DailyRecommendationBean> GetDailyRecommendations();

    /**
     * 获取专辑分类标签
     * @return
     */
    Observable<AlbumCategoryBean> GetAlbumCategory();

    /**
     * 根据标签获取专辑列表
     * @param categoryId
     * @param page
     * @return
     */
    Observable<AlbumCategoryResultBean> GetAlbumByCategory(long categoryId, int page ,String tagName);

    /**
     * 获取用户收藏列表并于本地同步
     * @return
     */
    Observable<AlbumFavouriteBean> GetAlbumRadioFavourite();

    /**
     * 获取所有已经购买的列表
     * @param pageIndex
     * @return
     */
    Observable<PaiedAlbumBean> GetAllPaiedAlbum(int pageIndex);


    /**
     * 获取专辑下的节目列表
     * @param albumId
     * @param pageIndex
     * @return
     */
    Observable<AlbumBrowseBean> GetAlbumBrowse(long albumId, int pageIndex);


    /**
     * 搜索专辑
     * @param q
     * @param pageIndex
     * @return
     */
    Observable<NewSearchAlbumResultBean> SearchAlbums(String q, int pageIndex);


    /**
     * 获取电台直播节目的详细信息
     * @param radioId
     * @return
     */
    Observable<LiveRadioDetailBean> GetPlayingProgramDetail(long radioId);

    /**
     * 获取某天的radio节目列表
     * @param radioId
     * @param weekday
     * @return
     */
    Observable<RadioDeailBean> getLiveSchedules(long radioId, int weekday);


    /**
     * 获取播放历史
     * @return
     */
    Observable<PlayHistoryOnlineBean> getPlayHistory();

    /**
     * 获取热词
     * @return
     */
    Observable<HotwordsBean> GetHotWords();


    /**
     * 推荐词
     * @param q
     * @return
     */
    Observable<SuggestWordsBean> GetSearchSuggestWords(String q);


    /**
     * 本地电台获取新接口
     * @param latitude
     * @param longitude
     * @return
     */
    Observable<LocalOnlineRadioBean> BrowseLocalRadios(String latitude, String longitude,int pageIndex);


    /**
     * 获取搜索历史
     * @return
     */
    Observable<SearchHistoryResponseBean> GetSearchHistory();


    /**
     * 获取价格信息
     * @param albumId
     * @return
     */
    Observable<PriceTypeInfoBean> GetPriceInfo(long albumId);


    /**
     * 获取cp相关信息接口
     * @return
     */
    Observable<CPInfoBean> GetCPInfo();


    Observable<CategoryTagBean> GetCategoryTags(long categoryId);


    Observable<BaseBean> PlaceOrder(int priceType,String payContent,String price);

    Observable<BoughtAlbumBean> GetBoughtAlbums();

    Observable<ExclusiveRecommendationBean> GetRecommendation(int pageIndex);

    Observable<AlbumBrowseBean> BrowsePaidAlbumTracks(long albumId,  int pageIndex);

    Observable<TopListBean> RadioRanks(int pageIndex);

    Observable<TopListAlbumBean> RadioRanksById(int id, int pageIndex);

    Observable<VIPInfoBean> QueryVIPInfo();

    Observable<BestCollectionBean> BestCollection(int pageIndex);

    Observable<VIPRecommendationBean> VIPRecommendation(int pageIndex);

    Observable<PlayInfoBean> GetPlayInfo(long trackId);

    Observable<BaseBean> ClearSearchHistory();

    Observable<CommonAlbumRadioSearchResultBean> SearchAll(String q, int pageSize, int pageIndex);

    Observable<BaseBean> AddUserFavourite(String body);
    Observable<BaseBean> CancelUserFavourite(String body);


    Observable<BaseBean> SyncSearchHistory(String jsonString);


    Observable<BaseBean> SyncPlayHistory(String jsonString);
    Observable<BaseBean> DeletePlayHistory(String jsonString);


    Observable<XiMaLaYaOrderBean> PlaceOrder(String jsonString);
}
